<?php

/**
 * 模型基类，可以链接数据库，并且可以查询SQL，并返回数据集
 */
class Model
{

    protected $dbh;

//__construct初始化操作
    public function __construct()
    {
        $this->connect();
//        设置编码格式为utf8
        $this->query('SET NAMES utf8');
    }

    /**
     * 链接数据库
     */
    public function connect()
    {
        $config = include APP_PATH . "config.php";
        $this->dbh = new PDO("mysql:host={$config['host']};dbname={$config['dbname']}", $config['user'], $config['pass']);
    }

    /**
     * 查询SQL,并且返回结果集
     */
    public function query($sql, $all = true)
    {
        $sth = $this->dbh->query($sql);
        if ($all == false) {
//PDO::FETCH_ASSOC:指定获取方式,将结果集中地每一行作为一个对象返回,
//此对象的变量名对应着列名,如果结果集中包含多个名称相同的列,
//则每个列名只返回一个值
//fetch:从结果集中获取下一行 返回一行
            $row = $sth->fetch(PDO::FETCH_ASSOC);
        } else {
//  fetchAll:返回一个包含结果集中所有行的数组 返回多行
            $row = $sth->fetchAll(PDO::FETCH_ASSOC);
        }
        return $row;
    }

    /**
     * 执行SQL操作
     *
     * @param type $sql
     * @return type
     */
//    execute执行一条预处理语句
    public function execute($sql)
    {
// exec:执行一条sql语句,并返回受影响的行数 用于增删改
        $count = $this->dbh->exec($sql);
        return $count;

    }

}
